#ifndef _APP_ML5238_H_
#define _APP_ML5238_H_
#include <stdbool.h>
#include "sys_hc32f460.h"
#include "dvc.h"

void chgOptionEnable(uint8_t ctrl);
void dsgOptionEnable(uint8_t ctrl);
void afe_balance_enable(uint8_t ctrl);

void Update_battery_temp(void);
void afe_prechg_mos_ctrl(bool ctrl);
void afe_chg_mos_ctrl(bool ctrl);
void afe_dsg_mos_ctrl(bool ctrl);
void afe_chglimit_mos_ctrl(bool ctrl);
void afe_heat_mos_ctrl(uint8_t ctrl);
void Judge_BatNum(void);
void afe_init(void);
void FET_Config(void);

bool Load_detection(void);

void afe_OCD1_Config(uint16_t TH,uint16_t DLY);
void afe_OCD2_Config(uint16_t TH,uint16_t DLY,bool enable);
void afe_OCC1_Config(uint16_t TH,uint16_t DLY);
void afe_OCC2_Config(uint16_t TH,uint16_t DLY,bool enable);
void afe_OV_Config(uint16_t TH,uint16_t DLY);
void afe_UV_Config(uint16_t TH,uint16_t DLY);
void afe_SCD_Config(uint16_t TH,uint16_t DLY,bool enable);

void Afe_Clear_OCD1(void);
void Afe_Clear_OCD2(void);
void Afe_Clear_OCC1(void);
void Afe_Clear_OCC2(void);
void Afe_Clear_OV(void);
void Afe_Clear_UV(void);
void Afe_Clear_SCD(void);

void OverTempProtect(uint8_t temp);
void CalcuVolMaxMin(void);
void BalanceProcess(void);
void afe_update_balance(void);
void afe_balance_policy(void);
uint8_t get_afe_update_flag(void);
bool afe_update_cellvol(void);
void afe_update_status(void);
void afe_update_current(void);
void afe_update_bat_temp(void);

void afe_poweroff(void);
void afe_timeout_deal(void);
void afe_sleep_enter(void);
void afe_sleep_exit(void);
void afe_reboot(void);
void afe_set_cellvol_period(DVC11xx_VadcPeriod period);
void afe_BrokenLineDetect(void);

#endif